<?php
ob_start();
require_once("../configs.php");
require_once(PASTA_SMARTY . "Funcoes.class.php");
require_once(PASTA_SMARTY . "Cryptografa.class.php");
require_once (PASTA_SMARTY . 'ConfigSmarty.class.php');
require_once(PASTA_BANCO_DAOGENERICO . "DaoGenerico.class.php");
require_once(PASTA_CONEXAO . "Conexao.class.php");


$crypt = new Cryptografa();
$daoGenerico = new DaoGenerico();
$smarty = ConfigSmarty::getConfigSmarty();

gerarFormulario($smarty);

function gerarFormulario($smarty) {
    $acao = $_POST['acao'];
    $url = $_POST['url'];
    unset($_POST['acao']);
    unset($_POST['url']);
    //Funcoes::debuga($_POST, $acao);

    if ($_POST["img"]) {
        $img = $_POST["img"];
        unset($_POST["img"]);
    }
    $arrpost = array_values($_POST);
    //Funcoes::debuga($_POST, $arrpost,$img);
    $x = 0;
    foreach ($arrpost as $i => $valor) {
        if ($i == 0) {
            $tabela = $valor;
        } else {
            if ($x >= 5) {
                $x = 0;
                $arrDados[] = $arrAux;
                $arrAux = null;
            }
            $arrAux[$x] = $valor;
            $x++;
        }
        if ($i == count($arrpost) - 1) {
            $arrDados[] = $arrAux;
        }
    }
    foreach ($arrDados as $i => $valor) {
        $array = explode(":", $valor[0]);
        $novo[] = array_merge($valor, $array);
        unset($novo[$i][0]);
    }
    foreach ($novo as $i => $valor) {
        $novo[$i][1] = pegaLargura($valor[1]);
        $novo[$i][6] = "{" . $valor[6] . "}";
        if ($valor[7] == "select") {
            $novo[$i][3] = str_replace('"', '\"', $valor[3]);
            $novo[$i][6] = str_replace("{", "", $valor[6]);
            $novo[$i][6] = str_replace("}", "", $valor[6]);
        }
    }
    //Funcoes::debuga($novo);

    if (!empty($img)) {
        $smarty->assign("FILE", true);
    }
    //Funcoes::debuga($novo);

    $smarty->assign("DADOS_GERADOR", $novo);
    $smarty->assign("INI_SELECT", "{CHAMA_FUNCAO funcao=\"getCombo\" classe=\"imprimiConteudo\"");
    $smarty->assign("URL_IMG_SALVAS", "{" . "$" . "URL_IMG_SALVAS" . "}");
    $smarty->assign("if_nome_foto", "{if " . "$" . "nome_foto" . "}");
    $smarty->assign("nome_foto", "{" . "$" . "nome_foto" . "}");
    $smarty->assign("else", "{else}");
    $smarty->assign("fim_if", "{/if}");
    $campos = $smarty->fetch(PASTA_HTML_GERADOR . "formCampos.tpl");
    //Funcoes::debuga($novo);
    $id_tabela = obterColunaPrimaryKey($tabela);

    $smarty->assign("CAMPOS", $campos);
    $smarty->assign("CAMINHO_PASTA", "{CHAMA_FUNCAO funcao=\"getCaminhoPastaBanco\" classe=\"imprimiConteudo\"}");
    $smarty->assign("FORM", "form" . ucfirst(trim(str_replace("tb_", "", $tabela))));
    $smarty->assign("ACTION", "{" . "$" . "URLEXECUTE" . "}");
    $smarty->assign("PARAMS_FORM", "{" . "$" . "PARAMS" . "}");
    $smarty->assign("TITULO_FORM", "CADASTRO DE " . strtoupper(str_replace("_", " ", str_replace("tb_", " ", $tabela))));
    $smarty->assign("TABELA", $tabela);
    $smarty->assign("ID_TABELA", $id_tabela);
    $smarty->assign("URL_ATUAL", "{" . "$" . "URLATUAL" . "}");
    $smarty->assign("CANCELA", "{" . "$" . "CANCELA" . "}");
    $smarty->assign("TITULO_MSG", "{if " . "$" . "TITULO_MSG}" . "{" . "$" . "TITULO_MSG" . "}{else}Titulo Mensagem!{/if}");
    $smarty->assign("TEXTO_MSG", "{if " . "$" . "TEXTO_MSG}" . "{" . "$" . "TEXTO_MSG" . "}{else}Titulo Mensagem!{/if}");
    $smarty->assign("TIPO_MSG", "{" . "$" . "smarty.const.TIPO_MSG}");
    $smarty->assign("TITULO_MSG", "{" . "$" . "smarty.const.TITULO_MSG}");
    $smarty->assign("PARAM_FECHAR_MSG_FORM", "$" . "PARAM_FECHAR_MSG}");
    $smarty->assign("IF_MSG", "{if " . "$" . "smarty.const.MSG}");
    $smarty->assign("MSG_FORM", "{" . "$" . "smarty.const.MSG}");
    $smarty->assign("IF_FIM", "{/if}");
    $smarty->assign("CLOSE", "x");
    $html = $smarty->fetch(PASTA_HTML_GERADOR . "formCorpo.tpl");



    if ($acao == 1) {
        $smarty->assign("DADOS_VIEW_GERADOR", $html);
        $html = $smarty->fetch(PASTA_CONTEUDO_MODEL . "telaGerador.tpl");
        return $html;
    } else {
        $result = geraTpl(PASTA_CONTEUDO_MODEL, trim("form" . str_replace("tb_", "", $tabela) . ".tpl"), $html);
        if ($result) {
            $msg = Funcoes::processaMensagem(PROC_CONCLUIDO, "Formulário Gerado com Sucesso!", ALERT_SUCESSO, 1);
            Header("Location: " . $url . $msg);
        } else {
            $msg = Funcoes::processaMensagem(ERRO_PROCESSO, "Erro:Formulário Não foi Gerado!", ALERT_ERRO, 1);
            Header("Location: " . $url . $msg);
        }
        //Funcoes::debuga(htmlentities($html));
    }
}

function pegaLargura($id = null) {
    $con = null;
    if (!empty($id)) {
        $conexao = new Conexao();
        try {
            $con = $conexao->getConexao();
            $sql = "SELECT descricao FROM tb_larguras_campos WHERE id_largura=" . $id;
            $result = end($con->getRow($sql));
            $con->Close();
        } catch (Exception $e) {
            $con->Close();
            echo(Funcoes::organizaMsgErro("Erro ao Logar", $e));
        }
    } else {
        $result = "large";
    }
    return $result;
}

function obterColunaPrimaryKey($tabela = null) {
    $conexao = new Conexao();
    try {
        $con = $conexao->getConexao();
        $sql = "SELECT REFERENCED_COLUMN_NAME FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA ='" . BASE . "' AND TABLE_NAME ='" . $tabela . "' AND REFERENCED_TABLE_NAME IS NOT NULL";
        $id_tabela = end($con->getRow($sql));
        $con->Close();
    } catch (Exception $e) {
        $con->Close();
        echo(Funcoes::organizaMsgErro("Erro ao Logar", $e));
    }
    return $id_tabela;
}

function geraTpl($caminho = null, $nome = null, $conteudo = null) {
# Nome do arquivo html
    $pagename = $caminho . $nome;
#Criar o arquivo
    $fp = fopen($pagename, "w");
    $fw = fwrite($fp, $conteudo);
#Verificar se o arquivo foi salvo.
    if ($fw == strlen($conteudo)) {
        return true;
    } else {
        return false;
    }
}
?>